package com.it.a12test6;

import com.it.a11test5.MyRunable;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Server {
    public static void main(String[] args) throws IOException {
        //客户端：将本地文件上传到服务器。接收服务器的反馈。
        //服务器：接收客户端上传的文件，上传完毕之后给出反馈。

        //创建线程池对象
        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3,//核心线程数量
                16,//线程池总大小
                60,//空闲时间（单位）
                TimeUnit.SECONDS,//空闲时间
                new ArrayBlockingQueue<Runnable>(2),//队列
                Executors.defaultThreadFactory(),//线程工厂，让线程池如何创建线程对象
                new ThreadPoolExecutor.AbortPolicy()//阻塞队列
        );

        //创建ServerSocket对象
        ServerSocket ss = new ServerSocket(8888);
        //等待接收
        while (true) {
            Socket s = ss.accept();
            //当我们开启一条线程的时候，需要把服务器对象传递给线程
            //开启一条线程
            //一个用户就对应服务端的一条线程
            //new Thread(new MyRunable(s)).start();
            pool.submit(new MyRunable(s));
        }

    }
}
